// Copyright (C) 2018-2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//

#include "nodes/mkldnn_reference_node.h"
#include "nodes/mkldnn_shapeof.h"
#include "nodes/mkldnn_batch_to_space_node.h"
#include "nodes/mkldnn_multiclass_nms.hpp"
#include "nodes/mkldnn_adaptive_pooling.h"
#include "nodes/mkldnn_conv_node.h"
#include "nodes/mkldnn_roi_align_node.h"
#include "nodes/mkldnn_lrn_node.h"
#include "nodes/mkldnn_generic_node.h"
#include "nodes/mkldnn_experimental_detectron_roifeatureextractor_node.h"
#include "nodes/mkldnn_eltwise_node.h"
#include "nodes/mkldnn_reorg_yolo_node.h"
#include "nodes/mkldnn_pooling_node.h"
#include "nodes/mkldnn_transpose_node.h"
#include "nodes/mkldnn_grn_node.h"
#include "nodes/mkldnn_interpolate_node.h"
#include "nodes/mkldnn_experimental_detectron_detection_output_node.h"
#include "nodes/mkldnn_roll_node.h"
#include "nodes/mkldnn_fake_quantize_node.h"
#include "nodes/mkldnn_embedding_segments_sum_node.h"
#include "nodes/mkldnn_region_yolo_node.h"
#include "nodes/mkldnn_matmul_node.h"
#include "nodes/mkldnn_detection_output_node.h"
#include "nodes/mkldnn_reverse_sequence_node.h"
#include "nodes/mkldnn_pad_node.h"
#include "nodes/mkldnn_ctc_greedy_decoder_seq_len_node.h"
#include "nodes/mkldnn_reshape_node.h"
#include "nodes/mkldnn_psroi_pooling_node.h"
#include "nodes/mkldnn_memory_node.hpp"
#include "nodes/mkldnn_bin_conv_node.h"
#include "nodes/mkldnn_gather_elements_node.h"
#include "nodes/mkldnn_experimental_detectron_priorgridgenerator_node.h"
#include "nodes/mkldnn_tile_node.h"
#include "nodes/mkldnn_math_node.h"
#include "nodes/mkldnn_normalize_node.h"
#include "nodes/mkldnn_proposal_node.h"
#include "nodes/mkldnn_tensoriterator_node.h"
#include "nodes/mkldnn_fullyconnected_node.h"
#include "nodes/mkldnn_extract_image_patches_node.h"
#include "nodes/mkldnn_ctc_loss_node.h"
#include "nodes/mkldnn_reorder_node.h"
#include "nodes/mkldnn_gather_nd_node.h"
#include "nodes/mkldnn_shuffle_channels_node.h"
#include "nodes/mkldnn_bucketize_node.h"
#include "nodes/mkldnn_space_to_depth_node.h"
#include "nodes/mkldnn_concat_node.h"
#include "nodes/mkldnn_softmax_node.h"
#include "nodes/mkldnn_space_to_batch_node.h"
#include "nodes/mkldnn_select_node.h"
#include "nodes/mkldnn_topk_node.h"
#include "nodes/mkldnn_broadcast_node.h"
#include "nodes/mkldnn_matrix_nms_node.h"
#include "nodes/mkldnn_mvn_node.h"
#include "nodes/mkldnn_gather_node.h"
#include "nodes/mkldnn_scatter_update_node.h"
#include "nodes/mkldnn_gather_tree_node.h"
#include "nodes/mkldnn_def_conv_node.h"
#include "nodes/mkldnn_embedding_bag_offset_sum_node.h"
#include "nodes/mkldnn_deconv_node.h"
#include "nodes/mkldnn_roi_pooling_node.h"
#include "nodes/mkldnn_range_node.h"
#include "nodes/mkldnn_split_node.h"
#include "nodes/mkldnn_one_hot_node.h"
#include "nodes/mkldnn_log_softmax_node.h"
#include "nodes/mkldnn_strided_slice_node.h"
#include "nodes/mkldnn_dft_node.h"
#include "nodes/mkldnn_non_max_suppression_node.h"
#include "nodes/mkldnn_convert_node.h"
#include "nodes/mkldnn_rnn.h"
#include "nodes/mkldnn_experimental_detectron_topkrois_node.h"
#include "nodes/mkldnn_cum_sum_node.h"
#include "nodes/mkldnn_depth_to_space_node.h"
#include "nodes/mkldnn_input_node.h"
#include "nodes/mkldnn_experimental_detectron_generate_proposals_single_image_node.h"
#include "nodes/mkldnn_embedding_bag_packed_sum_node.h"
#include "nodes/mkldnn_reduce_node.h"
#include "nodes/mkldnn_if_node.h"
#include "nodes/mkldnn_ctc_greedy_decoder_node.h"

#define MKLDNN_NODE(__prim, __type) \
    registerNodeIfRequired(MKLDNNPlugin, __prim, __type, MKLDNNNodeImpl<__prim>)

MKLDNNPlugin::MKLDNNNode::NodesFactory::NodesFactory()
    : Factory("NodesFactory") {
    MKLDNN_NODE(MKLDNNGenericNode, Generic);
    MKLDNN_NODE(MKLDNNCumSumNode, CumSum);
    MKLDNN_NODE(MKLDNNConvolutionNode, Convolution);
    MKLDNN_NODE(MKLDNNSpaceToBatchNode, SpaceToBatch);
    MKLDNN_NODE(MKLDNNLrnNode, Lrn);
    MKLDNN_NODE(MKLDNNBatchToSpaceNode, BatchToSpace);
    MKLDNN_NODE(MKLDNNNormalizeL2Node, NormalizeL2);
    MKLDNN_NODE(MKLDNNIfNode, If);
    MKLDNN_NODE(MKLDNNProposalNode, Proposal);
    MKLDNN_NODE(MKLDNNBroadcastNode, Broadcast);
    MKLDNN_NODE(MKLDNNExperimentalDetectronTopKROIsNode, ExperimentalDetectronTopKROIs);
    MKLDNN_NODE(MKLDNNReorderNode, Reorder);
    MKLDNN_NODE(MKLDNNBinaryConvolutionNode, BinaryConvolution);
    MKLDNN_NODE(MKLDNNMatrixNmsNode, MatrixNms);
    MKLDNN_NODE(MKLDNNAdaptivePoolingNode, AdaptivePooling);
    MKLDNN_NODE(MKLDNNPoolingNode, Pooling);
    MKLDNN_NODE(MKLDNNReduceNode, Reduce);
    MKLDNN_NODE(MKLDNNEltwiseNode, Eltwise);
    MKLDNN_NODE(MKLDNNSoftMaxNode, Softmax);
    MKLDNN_NODE(MKLDNNEmbeddingBagPackedSumNode, EmbeddingBagPackedSum);
    MKLDNN_NODE(MKLDNNInputNode, Input);
    MKLDNN_NODE(MKLDNNInputNode, Output);
    MKLDNN_NODE(MKLDNNMemoryInputNode, MemoryInput);
    MKLDNN_NODE(MKLDNNMemoryOutputNode, MemoryOutput);
    MKLDNN_NODE(MKLDNNTileNode, Tile);
    MKLDNN_NODE(MKLDNNDFTNode, DFT);
    MKLDNN_NODE(MKLDNNGatherTreeNode, GatherTree);
    MKLDNN_NODE(MKLDNNSpaceToDepthNode, SpaceToDepth);
    MKLDNN_NODE(MKLDNNFullyConnectedNode, FullyConnected);
    MKLDNN_NODE(MKLDNNCTCGreedyDecoderNode, CTCGreedyDecoder);
    MKLDNN_NODE(MKLDNNTransposeNode, Transpose);
    MKLDNN_NODE(MKLDNNDeformableConvolutionNode, DeformableConvolution);
    MKLDNN_NODE(MKLDNNReorgYoloNode, ReorgYolo);
    MKLDNN_NODE(MKLDNNEmbeddingSegmentsSumNode, EmbeddingSegmentsSum);
    MKLDNN_NODE(MKLDNNSelectNode, Select);
    MKLDNN_NODE(MKLDNNShapeOfNode, ShapeOf);
    MKLDNN_NODE(MKLDNNExperimentalDetectronGenerateProposalsSingleImageNode, ExperimentalDetectronGenerateProposalsSingleImage);
    MKLDNN_NODE(MKLDNNReverseSequenceNode, ReverseSequence);
    MKLDNN_NODE(MKLDNNFakeQuantizeNode, FakeQuantize);
    MKLDNN_NODE(MKLDNNNonMaxSuppressionNode, NonMaxSuppression);
    MKLDNN_NODE(MKLDNNExperimentalDetectronPriorGridGeneratorNode, ExperimentalDetectronPriorGridGenerator);
    MKLDNN_NODE(MKLDNNGatherNDNode, GatherND);
    MKLDNN_NODE(MKLDNNLogSoftmaxNode, LogSoftmax);
    MKLDNN_NODE(MKLDNNPSROIPoolingNode, PSROIPooling);
    MKLDNN_NODE(MKLDNNRNN, RNNCell);
    MKLDNN_NODE(MKLDNNRNN, RNNSeq);
    MKLDNN_NODE(MKLDNNCTCLossNode, CTCLoss);
    MKLDNN_NODE(MKLDNNSplitNode, Split);
    MKLDNN_NODE(MKLDNNDetectionOutputNode, DetectionOutput);
    MKLDNN_NODE(MKLDNNGatherElementsNode, GatherElements);
    MKLDNN_NODE(MKLDNNCTCGreedyDecoderSeqLenNode, CTCGreedyDecoderSeqLen);
    MKLDNN_NODE(MKLDNNBucketizeNode, Bucketize);
    MKLDNN_NODE(MKLDNNExperimentalDetectronROIFeatureExtractorNode, ExperimentalDetectronROIFeatureExtractor);
    MKLDNN_NODE(MKLDNNMathNode, Math);
    MKLDNN_NODE(MKLDNNMultiClassNmsNode, MulticlassNms);
    MKLDNN_NODE(MKLDNNConvertNode, Convert);
    MKLDNN_NODE(MKLDNNEmbeddingBagOffsetSumNode, EmbeddingBagOffsetsSum);
    MKLDNN_NODE(MKLDNNRollNode, Roll);
    MKLDNN_NODE(MKLDNNPadNode, Pad);
    MKLDNN_NODE(MKLDNNReshapeNode, Reshape);
    MKLDNN_NODE(MKLDNNMVNNode, MVN);
    MKLDNN_NODE(MKLDNNMatMulNode, MatMul);
    MKLDNN_NODE(MKLDNNScatterUpdateNode, ScatterUpdate);
    MKLDNN_NODE(MKLDNNScatterUpdateNode, ScatterElementsUpdate);
    MKLDNN_NODE(MKLDNNScatterUpdateNode, ScatterNDUpdate);
    MKLDNN_NODE(MKLDNNInterpolateNode, Interpolate);
    MKLDNN_NODE(MKLDNNROIPoolingNode, ROIPooling);
    MKLDNN_NODE(MKLDNNTensorIteratorNode, TensorIterator);
    MKLDNN_NODE(MKLDNNConcatNode, Concatenation);
    MKLDNN_NODE(MKLDNNExtractImagePatchesNode, ExtractImagePatches);
    MKLDNN_NODE(MKLDNNOneHotNode, OneHot);
    MKLDNN_NODE(MKLDNNExperimentalDetectronDetectionOutputNode, ExperimentalDetectronDetectionOutput);
    MKLDNN_NODE(MKLDNNROIAlignNode, ROIAlign);
    MKLDNN_NODE(MKLDNNShuffleChannelsNode, ShuffleChannels);
    MKLDNN_NODE(MKLDNNDepthToSpaceNode, DepthToSpace);
    MKLDNN_NODE(MKLDNNDeconvolutionNode, Deconvolution);
    MKLDNN_NODE(MKLDNNGatherNode, Gather);
    MKLDNN_NODE(MKLDNNRegionYoloNode, RegionYolo);
    MKLDNN_NODE(MKLDNNRangeNode, Range);
    MKLDNN_NODE(MKLDNNTopKNode, TopK);
    MKLDNN_NODE(MKLDNNStridedSliceNode, StridedSlice);
    MKLDNN_NODE(MKLDNNGRNNode, GRN);
}
